from collections import OrderedDict

from .models import GoodsChannel


def get_categories():
    """
    商品频道及分类菜单，
    使用有序字典保存类别的顺序
    """
    # categories = {
    #     1: { # 组1
    #         'channels': [{'id':, 'name':, 'url':},{}, {}...],
    #         'sub_cats': [{'id':, 'name':, 'sub_cats':[{},{}]}, {}, {}, ..]
    #     },
    #     2: { # 组2
    #
    #     }
    # }
    # 创建有序字典
    categories = OrderedDict()

    # 导入商品频道
    # 查询一级频道信息
    # 可以使用两个字段进行排序:用在第一个字段相等，用第二个来排序的情形
    # Articlelist = Article.objects.order_by('-nid','ctime')
    channels = GoodsChannel.objects.order_by("group_id", "sequence")
    # 归纳当前组别
    for channel in channels:
        group_id = channel.group_id  # 当前组

        # 创建出组别
        if group_id not in categories:
            categories[group_id] = {"channels": [], "sub_cats": []}

        cat1 = channel.category  # 当前商品顶级类别

        # 追加当前频道
        categories[group_id]['channels'].append({
            "id": cat1.id,
            "name": cat1.name,
            "url": channel.url
        })
        # 构建当前类别的子类
        for cat2 in cat1.goodscategory_set.all():
            cat2.sub_cats = []
            for cat3 in cat2.goodscategory_set.all():
                             # goodscategory_set
                cat2.sub_cats.append(cat3)

                categories[group_id]["sub_cats"].append(cat2)

    return categories
